create database if not exists myonlineddl;                    -- 创建db, 保存一些配置或者记录等信息

create user if not exists myonlineddl@'10.40.%' identified by 'myonlineddlpassword';   -- 创建用户

grant all on *.* to myonlineddl@'10.40.%'; -- 授权

use myonlineddl;

CREATE TABLE `check_big_query_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `nid` int(11) NOT NULL DEFAULT '0' COMMENT '实例信息id, 对应到check_mdl_and_delay_for_node_info表的id',
  `next_time` tinyint(4) NOT NULL DEFAULT '0' COMMENT '下次发送邮件的时间,0表示马上发送, 1表示一分钟后发送, 2表示5分钟后发送,  3表示15分钟后发送, 4表示30分钟后发送, 这也是一个轮询,然后重新计时',
  `sql_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '这是个id号, 对应到check_mdl_and_delay_for_mdl_info表的sql_id字段, 0表示无mdl',
  `send_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '发送邮件时间',
  `send_state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '发送状态, 0表示已经发送, 1表示待发送',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录实例信息表';

CREATE TABLE `check_for_query_sql_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `sql_id` varchar(30) NOT NULL DEFAULT '0' COMMENT '对应check_big_query_info 表的sql_id',
  `exe_sql_info` text COMMENT 'sql 信息, 是什么sql阻塞了其他sql',
  `start_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT 'sql执行的开始时间',
  `exe_time` varchar(50) DEFAULT '0',
  `exe_state` varchar(20) NOT NULL DEFAULT '' COMMENT 'sql执行的状态',
  `curr_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '当前时间',
  `client_ip` varchar(20) DEFAULT '' COMMENT '来源ip',
  PRIMARY KEY (`id`),
  KEY `ik_sql_id` (`sql_id`),
  KEY `curr_time` (`curr_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录当前发生mdl时, 都有哪些sql正在执行，并且会kill掉超过两小时的select sql';

CREATE TABLE `check_for_white_list` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `port` int(11) NOT NULL DEFAULT '0' COMMENT '白名单的端口',
  `role` tinyint(4) NOT NULL DEFAULT '0' COMMENT '为什么操作加白名单, 0表示不加, 1表示给检查mdl加白, 2表示给检查大查询加白',
  `remarks` varchar(200) NOT NULL DEFAULT '0' COMMENT '备注, 谁要求的加白, 通过什么方式提交的申请',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='白名单，针对检查mdl和大查询做的，如果加了白名单就不会检查mdl及大查询了，因为这两个检查会kill掉一些sql，可能会对业务有影响';

CREATE TABLE `check_mdl_and_delay_for_curexe_sql_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `sql_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'sql id号, 被check_mdl_and_delay_info表的mdl_info字段使用',
  `exe_sql_info` text COMMENT 'sql 信息, 是什么sql阻塞了其他sql',
  `start_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT 'sql执行的开始时间',
  `exe_state` varchar(20) NOT NULL DEFAULT '' COMMENT 'sql执行的状态',
  `curr_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '当前时间',
  `client_ip` varchar(20) DEFAULT '' COMMENT '来源ip',
  PRIMARY KEY (`id`),
  KEY `ik_sql_id` (`sql_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录当前发生mdl时, 都有哪些sql正在执行';

CREATE TABLE `check_mdl_and_delay_for_mdl_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `sql_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'sql id号, 被check_mdl_and_delay_info表的mdl_info字段使用',
  `sql_info` text COMMENT 'sql 信息, 是什么sql被mdl阻塞了',
  `block_time` int(11) NOT NULL DEFAULT '0' COMMENT '当前总共被阻塞了多长时间了, 单位是秒数',
  `curr_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '当前时间',
  `client_ip` varchar(20) DEFAULT '' COMMENT '来源ip',
  PRIMARY KEY (`id`),
  KEY `ik_sql_id` (`sql_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录当前mdl状态, 都有哪些sql被mdl阻塞了';

CREATE TABLE `check_mdl_and_delay_for_node_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `host` varchar(15) NOT NULL DEFAULT '127.0.0.1' COMMENT '实例ip',
  `port` int(11) NOT NULL DEFAULT '9298' COMMENT '实例端口',
  `role` char(6) NOT NULL DEFAULT '' COMMENT '实例角色. master , slave',
  PRIMARY KEY (`id`),
  KEY `ik_host_port` (`host`,`port`),
  KEY `ik_port` (`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录实例信息表';

CREATE TABLE `check_mdl_and_delay_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `oid` int(11) NOT NULL DEFAULT '0' COMMENT 'order id',
  `next_time` tinyint(4) NOT NULL DEFAULT '0' COMMENT '下次发送邮件的时间,0表示马上发送, 1表示一分钟后发送, 2表示5分钟后发送,  3表示15分钟后发送, 4表示30分钟后发送, 这也是一个轮询,然后重新计时',
  `delay_time` int(11) NOT NULL DEFAULT '0' COMMENT '当前延迟秒数, 0表示无延迟, 不考虑复制异常的情况, 因为复制异常zabbix会告警,所以复制异常也是0',
  `mdl_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '这是个id号, 对应到check_mdl_and_delay_for_mdl_info表的sql_id字段, 0表示无mdl',
  `send_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '发送邮件时间',
  `send_state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '发送状态, 0表示已经发送, 1表示待发送',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录实例信息表';

CREATE TABLE `dbadb_alter_table_crontab_task` (
  `id` bigint(10) unsigned NOT NULL COMMENT '自增键',
  `order_id` bigint(10) unsigned NOT NULL COMMENT '工单主表ID',
  `inip` varchar(15) NOT NULL DEFAULT '' COMMENT '这个任务被哪个机器执行',
  `mysql_port` int(11) NOT NULL DEFAULT '0' COMMENT 'mysql端口',
  `db_name` varchar(64) NOT NULL DEFAULT '' COMMENT 'mysql db',
  `u_name` varchar(30) DEFAULT 'moshan' COMMENT '用户邮箱前缀',
  `istate` tinyint(3) NOT NULL DEFAULT '0' COMMENT '状态, -1表示执行失败, 0表示执行成功, 1表示正在执行, 2表示等待执行',
  `exe_date` date NOT NULL DEFAULT '2023-01-01' COMMENT '开始执行的日期',
  `start_hour` tinyint(4) DEFAULT '0' COMMENT '执行时间, 开始时间, 这个时间之前的不执行',
  `end_hour` tinyint(4) DEFAULT '0' COMMENT '执行的时间, 结束时间, 这个时间之后的不执行',
  `command` text NOT NULL COMMENT '改表命令',
  PRIMARY KEY (`id`),
  KEY `idx_tb_workorder_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `dbadb_alter_table_order_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `order_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '对应改表工单号',
  `user_mail` varchar(50) DEFAULT '' COMMENT '工单申请人的邮箱地址',
  `port` int(11) NOT NULL DEFAULT '0' COMMENT 'mysql端口, 表示该端口需要定制化延迟时间, 且检查所有从库',
  `db_name` varchar(64) NOT NULL DEFAULT '' COMMENT 'mysql库名',
  `t_name` varchar(64) NOT NULL DEFAULT '' COMMENT 'mysql表名',
  `run_state` int(11) DEFAULT '0' COMMENT '0正常改表, 1暂停改表, -1终止改表. 改成1, 可以暂停改表, 改成0又可以继续改表. 改成-1终止该工单改表(注意需要修改dbadb工单号对应的那行, 否则不会生效. chunk_size,run_state,repl_time是基于工单号的)',
  `repl_time` int(11) NOT NULL DEFAULT '60' COMMENT '最大允许多少秒的延迟',
  `osc_tool` varchar(20) NOT NULL DEFAULT 'pt-osc' COMMENT '改表工具',
  `progress` varchar(50) NOT NULL DEFAULT '0%' COMMENT '改表进度值',
  `a_time` datetime NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '开始时间',
  `u_time` datetime NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '最后检查时间',
  `remarks` varchar(200) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ixk_order_id_db_table` (`order_id`,`db_name`,`t_name`),
  KEY `ixk_port` (`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='工单状态表';

CREATE TABLE `dbadb_alter_table_progress_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `order_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '改表工单的工单号',
  `user_mail` varchar(50) NOT NULL DEFAULT '' COMMENT '申请人的告警邮箱, 会将进度信息发送到这个邮箱',
  `port` int(11) NOT NULL DEFAULT '0' COMMENT '端口, 根据端口查邮箱',
  `table_name` varchar(100) NOT NULL DEFAULT '' COMMENT 'db.table, 库名表明',
  `send_state` tinyint(4) NOT NULL DEFAULT '0' COMMENT '发送邮件状态值, 0表示待发送, 1表示已发送, 2表示发送失败',
  `start_time` datetime NOT NULL DEFAULT '2020-01-01 00:00:00' COMMENT '改表开始时间',
  `remarks` text COMMENT '结果信息',
  PRIMARY KEY (`id`),
  KEY `port` (`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='改表进度表';

CREATE TABLE `dbadb_alter_table_record_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `order_id` bigint(20) DEFAULT '0' COMMENT '对应改表工单号',
  `user_mail` varchar(50) DEFAULT '' COMMENT '工单申请人的邮箱地址',
  `order_type` varchar(50) DEFAULT '' COMMENT 'drop|alter|pt-osc|ghost|create|test|execute工单类型, test表示在测试环境测试失败, execute表示在线上环境执行失败, 其余表示相应的动作失败',
  `port` int(11) NOT NULL DEFAULT '0' COMMENT 'mysql端口',
  `dbname` varchar(50) NOT NULL DEFAULT '0' COMMENT 'mysql库名',
  `t_name` varchar(50) NOT NULL DEFAULT '0' COMMENT 'mysql表名',
  `t_time` datetime DEFAULT '2020-01-01 00:00:00' COMMENT '入库操作时间',
  `remarks` varchar(1000) DEFAULT '' COMMENT '失败原因',
  PRIMARY KEY (`id`),
  KEY `port` (`port`),
  KEY `order_port` (`order_id`,`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录改表状态的表';

CREATE TABLE `dbadb_alter_table_repl_time` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `order_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '对应改表工单号',
  `user_mail` varchar(50) DEFAULT '' COMMENT '工单申请人的邮箱地址',
  `port` int(11) NOT NULL DEFAULT '0' COMMENT 'mysql端口, 表示该端口需要定制化延迟时间, 且检查所有从库',
  `chunk_size` int(11) DEFAULT '3000' COMMENT '对应ghost命令的--chunk-size=xxx',
  `run_state` int(11) DEFAULT '0' COMMENT '0正常改表, 1暂停改表, -1终止改表. 改成1, 可以暂停改表, 改成0又可以继续改表. 改成-1终止该工单改表(注意需要修改dbadb工单号对应的那行, 否则不会生效. chunk_size,run_state,repl_time是基于工单号的)',
  `repl_time` int(11) NOT NULL DEFAULT '60' COMMENT '最大允许多少秒的延迟',
  `big_table` tinyint(4) DEFAULT '0' COMMENT '是否支持大表改表, 如果表大小超过500g, 需要将这个字段改成1. 修改后仅单次生效',
  `disk_space` tinyint(4) DEFAULT '0' COMMENT '如果主库磁盘空间不足表大小的两倍不允许改表, 如果需要继续改表需要将这个字段改成1,表示允许【磁盘空间大小=表大小+50G】. 修改后仅单次生效',
  `osc_tool` tinyint(4) DEFAULT '0' COMMENT '0表示只能选择改表工具, 优先选ghost, 如果置为1. 表示强制使用pt-osc进行改表, 适用于ghost不能用的场景. 修改后仅单次生效',
  `progress` varchar(50) NOT NULL DEFAULT '0%' COMMENT '改表进度值',
  `max_connect` int(11) DEFAULT '2500' COMMENT '改表过程中, 连接数超过这个值就会kill掉空连接',
  `unique_key` tinyint(4) DEFAULT '0' COMMENT '是否支持添加唯一索引, 添加唯一索引有丢数据得风险(目标唯一索引的列存在重复值的话就会丢数据) 1表示允许, 默认是0',
  `remarks` varchar(200) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ixk_order_id` (`order_id`),
  KEY `ixk_port` (`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='改表配置表，通过操作这个表动态调整改表状态，以及改表工具的参数';

CREATE TABLE `dbadb_drop_table_state_info` (
  `id` int(11) NOT NULL COMMENT 'pk',
  `nid` int(11) NOT NULL DEFAULT '0' COMMENT '实例信息id, 对应到check_mdl_and_delay_for_node_info表的id',
  `oid` bigint(20) NOT NULL DEFAULT '0',
  `inip` varchar(15) NOT NULL DEFAULT '' COMMENT '哪个改表脚本的机器执行这个工单',
  `user_mail` varchar(50) NOT NULL DEFAULT '0' COMMENT '用户邮箱地址',
  `opt_type` varchar(30) NOT NULL DEFAULT '0' COMMENT '操作类型, later_drop_table_drop_table, drop_table, truncate_table, later_truncate_table',
  `db_name` varchar(50) NOT NULL DEFAULT '0',
  `table_list` text COMMENT '操作表的列表',
  `exe_sql_list` text COMMENT '实际执行的sql, 如果是延时删除的话, 这里保存待删除的sql',
  `drop_sql_list` text COMMENT '如果是延迟操作, 到时间需要执行的sql列表',
  `drop_md5` varchar(32) DEFAULT '' COMMENT '延时删除语句入库的时候, 将整个sql的md5值记录下来, 预防被任务二次编辑',
  `rollback_sql_list` text COMMENT '如果是延时删除的话, 这里保存回滚的sql, 在有效期(3天)内有效',
  `rollback_md5` varchar(32) DEFAULT '' COMMENT '回滚语句入库时记录回滚语句的md5值, 预防后面被无意编辑sql导致问题',
  `cur_time` date NOT NULL DEFAULT '2020-01-01' COMMENT '当前的时间',
  `exe_time` date NOT NULL DEFAULT '2020-01-01' COMMENT '执行操作的时间',
  `opt_state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '操作状态, 0表示已经操作, 1表示待操作',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_oid_mail` (`oid`,`user_mail`),
  KEY `ik_user_name` (`user_mail`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='记录dbadb删除数据的状态表';

CREATE TABLE `global_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '工单号',
  `mysql_port` int(11) NOT NULL DEFAULT '0' COMMENT 'mysql端口',
  `log_level` varchar(10) NOT NULL DEFAULT '' COMMENT '日志级别',
  `localhost_ip` varchar(18) NOT NULL DEFAULT '' COMMENT '记录日志的机器',
  `file_info` varchar(64) NOT NULL DEFAULT '' COMMENT '产生日志的文件',
  `func_info` varchar(64) NOT NULL DEFAULT '' COMMENT '产生日志的函数及行号',
  `log_info` text COMMENT '日志信息',
  `a_time` datetime NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '日志时间',
  PRIMARY KEY (`id`),
  KEY `order_id` (`order_id`),
  KEY `idx_time` (`a_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `mysql_ins_rs` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ins_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '实例ID',
  `ip` varchar(15) NOT NULL DEFAULT '' COMMENT 'RS的ip',
  `port` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '端口',
  `type` varchar(12) NOT NULL DEFAULT '' COMMENT '类型master,slave,proxy，sphinx',
  `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '状态：0创建中，1运行中',
  `ctime` timestamp NOT NULL DEFAULT '2020-12-31 16:00:00',
  `utime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_p_i_d_t_e` (`port`,`ip`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实例RS表';

CREATE TABLE `mysql_ins_rs_dev` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ins_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '实例ID',
  `ip` varchar(15) NOT NULL DEFAULT '' COMMENT 'RS的ip',
  `port` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '端口',
  `type` varchar(12) NOT NULL DEFAULT '' COMMENT '类型master,slave,proxy，sphinx',
  `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '状态：0创建中，1运行中',
  `ctime` timestamp NOT NULL DEFAULT '2020-12-31 16:00:00',
  `utime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_p_i_d_t_e` (`port`,`ip`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实例RS表';

CREATE TABLE `dbadb_alter_table_queue_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'pk',
  `order_id` int(11) NOT NULL DEFAULT '0' COMMENT 'order id',
  `inip` varchar(15) NOT NULL DEFAULT '' COMMENT '执行的机器',
  `mysql_port` int(11) NOT NULL DEFAULT '0' COMMENT 'mysql端口',
  `db_name` varchar(64) NOT NULL DEFAULT '' COMMENT 'mysql db',
  `t_name` varchar(64) NOT NULL DEFAULT '' COMMENT 'mysql表名',
  `run_state` tinyint(4) DEFAULT '0' COMMENT '0空闲, 1有改表',
  `alter_count` int(11) NOT NULL DEFAULT '0' COMMENT '改表次数, 累加',
  `a_time` datetime NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '开始时间',
  `u_time` datetime NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '最后改表时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_port_db_table` (`mysql_port`,`db_name`,`t_name`),
  KEY `idx_order_id` (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='改表队列信息';

begin;
insert into mysql_ins_rs (id,ins_id,ip,port,type,status) select 0,1,'192.168.168.22',8888,'slave','1';
insert into mysql_ins_rs (id,ins_id,ip,port,type,status) select 0,1,'192.168.168.22',7777,'slave','1';
insert into mysql_ins_rs (id,ins_id,ip,port,type,status) select 0,1,'192.168.168.21',8888,'master','1';
insert into mysql_ins_rs (id,ins_id,ip,port,type,status) select 0,1,'192.168.168.21',7777,'master','1';
commit;
select * from mysql_ins_rs;
